package logic

import (
	da "admin/dao/auth"
	"admin/dto"
	m "admin/models/auth"
	"admin/utils/pagination"
	"errors"
)

// PermissionLogic 权限业务逻辑
type PermissionLogic struct {
	permissionInterface da.PermissionRepoInterface
}

// NewPermissionLogic 创建新的权限逻辑实例
// repo: 权限仓库实例
// 返回值: 权限逻辑实例指针
func NewPermissionLogic(permissionRepoInterface da.PermissionRepoInterface) *PermissionLogic {
	// 使用GORM实现的权限仓库初始化逻辑实例
	return &PermissionLogic{
		permissionInterface: permissionRepoInterface,
	}
}

// List 获取权限列表
// 返回值: 权限列表和错误信息
func (l *PermissionLogic) List(req dto.PermissionListReq) (*pagination.PageResult[m.Permission], error) {
	return l.permissionInterface.List(req)
}

// Create 创建权限
// code: 权限代码
// 返回值: 错误信息
func (l *PermissionLogic) Create(req dto.PermissionDto) error {
	// 检查权限代码是否为空
	if req.Code == "" {
		return errors.New("权限代码不能为空")
	}
	// 调用仓库层创建权限
	return l.permissionInterface.Create(&m.Permission{
		Name:   req.Name,
		Code:   req.Code,
		Path:   req.Path,
		Method: req.Method,
	})
}

// Update 更新权限
// id: 权限ID
// name: 权限名称
// code: 权限代码
// path: 权限路径
// method: 请求方法
// 返回值: 错误信息
func (l *PermissionLogic) Update(id int64, req dto.PermissionDto) error {
	// 检查权限ID是否有效
	if id == 0 {
		return errors.New("权限ID不能为空")
	}
	// 检查权限代码是否为空
	if req.Code == "" {
		return errors.New("权限代码不能为空")
	}
	// 调用仓库层更新权限
	return l.permissionInterface.Update(&m.Permission{
		ID:     id,
		Name:   req.Name,
		Code:   req.Code,
		Path:   req.Path,
		Method: req.Method,
	})
}

// Delete 删除权限
// id: 权限ID
// 返回值: 错误信息
func (l *PermissionLogic) Delete(id int64) error {
	// 检查权限ID是否有效
	if id == 0 {
		return errors.New("权限ID不能为空")
	}
	// 调用仓库层删除权限
	return l.permissionInterface.Delete(id)
}

// GetPermissionByID 根据ID获取权限
// id: 权限ID
// 返回值: 权限对象和错误信息
func (l *PermissionLogic) GetPermissionByID(id int64) (*m.Permission, error) {
	// 检查权限ID是否有效
	if id == 0 {
		return nil, errors.New("权限ID不能为空")
	}
	return l.permissionInterface.GetPermissionByID(id)
}
